import { getToken, setToken, removeToken, setTime } from "@/utils/auth";
import { login, getInfo, getUserDetailById } from "@/api/user";
import { resetRouter } from "@/router";

// 状态
const state = {
  token: getToken() || null, // 设置token为共享状态 初始化vuex的时候，就优先从缓存读取
  userInfo: {}
}
// 同步方法
const mutations = {
  // 设置token
  setToken(state, token) {
    state.token = token // 将数据设置给vuex
    // 同步给缓存
    setToken(token)
  },
  removeToken(state) {
    state.token = null // 将vuex的数据置空
    // 同步给缓存
    removeToken()
  },
  setUserInfo(state, data) {
    state.userInfo = data
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
// 异步方法
const actions = {
  async login(context, data) {
    const token = await login(data)
    // console.log(token);
    // console.log(token, 'user.js/27行');
    context.commit('setToken', token)

    //写入时间戳 这个时间戳用于判断token是否过期
    setTime()
  },
  async getuserInfo(context) {
    const data = await getInfo()// data就是用户的基本资料
    const img = await getUserDetailById(data.userId)// 为了获取头像
    context.commit('setUserInfo', { ...img, ...data })// 提交mutations
    // 加一个点睛之笔  这里这一步，暂时用不到，但是请注意，这给我们后边会留下伏笔
    return data
  },
  // 退出登录
  logout(context) {
    // 删除token
    context.commit('removeToken')// 不仅仅删除了vuex中的 还删除了缓存中的
    // 删除用户资料
    context.commit('removeUserInfo')// 删除用户信息
    // 清空路由表
    resetRouter()
    // 还有一步  vuex中的数据是不是还在
    // 要清空permission模块下的state数据
    // vuex中 user子模块  permission子模块
    // 子模块调用子模块的action  默认情况下 子模块的context是子模块的
    // 父模块 调用 子模块的action
    // 方式 1 
    // context.commit('permission/setRoutes', [], { root: true })

    // 方式 2
    this.commit('permission/setRoutes', [])
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}